import Vue from 'vue'
// import store from '@/store'
import { baseURL } from '@/config/env'
import axios from 'axios'
import { querystring } from 'vux'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
const axiosX = axios.create({
  baseURL: baseURL
})

// request 拦截
// axiosX.interceptors.request.use(
//   res => {
//     // 成功则直接返回数据
//     if (res.data.code === '0000') {
//       return res.data
//     // 验证token失败则清空本地数据
//     } else if (res.data.code === '0003') {
//       window.location.hash = '/login'
//     } else {
//       return Promise.reject(res.data)
//     }
//   },
//   err => {
//     if (err.res) {
//       switch (err.res.status) {
//         case 401:
//           console.log('未登录')
//       }
//     }
//   }
// )

// response 拦截
// axiosX.interceptors.response.use(
//   res => {
//     // 成功则直接返回数据
//     if (res.data.code === '0000') {
//       return res.data
//     // 验证token失败则清空本地数据
//     } else if (res.data.code === '0003') {
//       window.location.hash = '/login'
//     } else {
//       return Promise.reject(res.data)
//     }
//   },
//   err => {
//     if (err.res) {
//       switch (err.res.status) {
//         case 401:
//           console.log('未登录')
//       }
//     }
//   }
// )
//

const XHR = ({method = 'post', qs = true, loading = false, loginRequire = true, reqComplex = false, reqContentType = 'urlencoded'}) => {
  // 用户登陆信息
  let userInfo = window.localStorage.getItem('userInfo')
  userInfo = userInfo ? JSON.parse(userInfo) : {}
  const user = {
    userId: userInfo.id ? userInfo.id : '',
    openId: window.localStorage.getItem('openId') || '',
    token: userInfo.loginToken || ''
  }

  // 带请求进度条成功方法
  const sucFunX = res => {
    // NProgress.done()
    if (res.data.code !== '0000') {
      // Vue.$vux.toast.text('获取数据失败', 'top')
    }
    return res.data
  }

  // 成功执行方法
  const sucFunC = res => {
    if (res.data.code !== '0000') {
      // Vue.$vux.toast.text('获取数据失败', 'top')
    }
    return res.data
  }

  // 带请求进度条失败方法
  const errFunX = err => {
    console.log(err, NProgress.done())
  }

  // 失败执行访求
  const errFunC = err => {
    console.log(err)
  }

  // 判断是否需要Longing
  const sucFun = loading ? sucFunX : sucFunC

  // 判断是否需要Longing
  const errFun = loading ? errFunX : errFunC

  return {user, sucFun, errFun}
}

// 简单带请求带状态POST
// axiosPosting('/fsddf', {id: 111, page: 1})
const axiosPosting = function (url = '', data = {}) {
  // NProgress.start()
  let {user, sucFun, errFun} = XHR({loading: true})
  let reqData = querystring.stringify({...user, ...data})
  return axiosX.post(url, reqData).then(sucFun).catch(errFun)
}

// 简单带请求POST
// axiosPost('/fsddf', {id: 111, page: 1})
const axiosPost = function (url = '', data = {}) {
  let {user, sucFun, errFun} = XHR({loading: false})
  let reqData = querystring.stringify({...user, ...data})
  return axiosX.post(url, reqData).then(sucFun).catch(errFun)
}

// 简单带请求带状态Get
// axiosGeting('/fsddf', {id: 111, page: 1})
const axiosGeting = function (url = '', data = {}) {
  // NProgress.start()
  let {user, sucFun, errFun} = XHR({loading: true})
  let params = {
    params: {...user, ...data}
  }
  return axiosX.get(url, params).then(sucFun).catch(errFun)
}

// 简单带请求GET
// axiosGet('/fsddf', {id: 111, page: 1})
const axiosGet = function (url = '', data = {}) {
  let {user, sucFun, errFun} = XHR({loading: false})
  let params = {
    params: {...user, ...data}
  }
  return axiosX.get(url, params).then(sucFun).catch(errFun)
}

// axios 默认请求
Vue.prototype.$axios = axios
Vue.axios = axios

// 带等待状态POST请求
Vue.prototype.$axiosPosting = axiosPosting
Vue.axiosPosting = axiosPosting

// 带等待状态GET请求
Vue.prototype.$axiosGeting = axiosGeting
Vue.axiosGeting = axiosGeting

// 无等待状态POST请求
Vue.prototype.$axiosPost = axiosPost
Vue.axiosPost = axiosPost

// 无等待状态GETt请求
Vue.prototype.$axiosGet = axiosGet
Vue.axiosGet = axiosGet
